package br.eng.eliseu.gwt.gestaoWeb.model.empresa;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;

import br.eng.eliseu.gwt.gestaoWeb.client.util.StringUtil;
import br.eng.eliseu.gwt.gestaoWeb.model.BaseEntity;
import br.eng.eliseu.gwt.gestaoWeb.model.endereco.Endereco;
import br.eng.eliseu.gwt.gestaoWeb.model.enums.StatusEnum;
import br.eng.eliseu.gwt.gestaoWeb.model.pessoa.TipoPessoaEnum;

@Entity
@SequenceGenerator(name="SQ_EMPRESA", sequenceName="SQ_EMPRESA")
@NamedQueries({
	@NamedQuery(name="empresa.porLikeNome", query="select b from Empresa b where 1=1 "+
			"and upper(b.nome) like upper(:cidade) "+
			"order by b.nome"),
	@NamedQuery(name="empresa.porDocumento", query="select b from Empresa b where 1=1 "+
			"and b.documento = :documento ")
})
public class Empresa extends BaseEntity{


	public Empresa(){}
	
	@Id
	@GeneratedValue(generator="SQ_EMPRESA", strategy=GenerationType.AUTO)
	private Integer id;

	@Column(length=10)
	@Enumerated(EnumType.STRING)
	private TipoPessoaEnum tipoPessoa;
	
	@Column(length=16)
	private String documento;
	
	@Column(length=254)
	private String nome;
	
	@Enumerated(EnumType.STRING)
	@Column(length=10)
	private StatusEnum status;
	
	@Column(length=15)
	private String telefone;
	
	@ManyToOne
	@JoinColumn(name="endereco_id")
	private Endereco endereco;

	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public TipoPessoaEnum getTipoPessoa() {
		return tipoPessoa;
	}
	public void setTipoPessoa(TipoPessoaEnum tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
	}
	public String getDocumento() {
		return documento;
	}
	public void setDocumento(String documento) {
		if (documento!=null && !"".equals(documento)){
			documento = documento.replaceAll("[^0-9]", "");
		}
		this.documento = documento;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		if (nome!=null){
			nome = StringUtil.padronizaNome(nome);
		}
		this.nome = nome;
	}
	public StatusEnum getStatus() {
		return status;
	}
	public void setStatus(StatusEnum status) {
		this.status = status;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public Endereco getEndereco() {
		return endereco;
	}
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
	
	public int compareTo(Empresa obj) {
		return getDocumento().compareTo(obj.getDocumento());
	}


}
